#ifndef FLAG2STATUS_H
#define FLAG2STATUS_H

#include <QObject>
#include <QWidget>
#include <QJsonObject>
#include <QHBoxLayout>
#include <QLabel>
#include <QPushButton>
#include <QSpacerItem>
#include <QHash>
#include <QLineEdit>


#include <QJsonDocument>
#include <QJsonParseError>
#include <QJsonArray>
#include <QDebug>
#include <QMap>
#include <QMutex>
#include"DeviceManager.h"
#include <QSharedPointer>

class Flag2Status : public QWidget
{
    Q_OBJECT
public:
    explicit Flag2Status(QWidget *parent = nullptr);
    explicit Flag2Status(const QJsonObject &statusDetails, QWidget *parent = nullptr);
    ~Flag2Status() override { qDebug() << "[Flag2Status] ~Flag2Status()"; }

    // 更新字段值
    void updateFieldValue(const QString &fieldName, int lineEditIndex, const QString &newValue);
    // 更新字段值
    void updateFieldValue(const QString &fieldName, const QString &newValue);

    void subEventCallBack(const QString& content);
    QString getLabel1() const;    // 返回label1文本
    QString getLabel3() const;    // 返回label3文本
    QLineEdit* getLineEdit1() const;  // 返回lineEdit1
    QLineEdit* getLineEdit2() const;  // 返回lineEdit2

public slots:
    // 绑定节点后
    void attachToNode(QSharedPointer<DeviceNode> node);

private slots:
    void onDataReceived(const QString& content);
    void onEventReceived(const QString& content);
private:

    struct FieldGroup {
        QString label1Text;    // 例如 label1 的文本 "joint_0"
        QString label3Text;
        QLineEdit* lineEdit1; // 对应 lineedit1 控件指针
        QLineEdit* lineEdit2; // 对应 lineedit2 控件指针
    };
    FieldGroup fg;
     QHash<QString, QLineEdit*> fieldLineEdits;  // 存储字段和 QLineEdit 对应的哈希表


    void setupControlLayout(const QJsonObject &statusDetails);

    QHash<QString, FieldGroup> fieldGroups;  // key 用 labelText 或你确定唯一的字符串

    void dataAnayle(const QString& content);
    QSharedPointer<DeviceNode> m_node;
    QMutex mFlag2StatusMutex;//互斥鎖
    //bool flagLimit1 = false;
};

#endif // FLAG2STATUS_H
